package org.way.base.util;

import org.way.base.dto.TreeDto;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class TreeUtil {

    public static void toTree(List<TreeDto> list) {
        //step1：利用父节点分组，即按照该租户下的所有部门的父Id进行分组，把所有的子节点List集合都找出来并一层层分好组
        Map<String, List<TreeDto>> listMap = list.parallelStream()
                .collect(Collectors.groupingBy(TreeDto::getParentId));
        //step2：关键一步，关联上子部门，将子部门的List集合经过遍历一层层地放置好，最终会得到完整的部门父子关系List集合
        list.forEach(val -> val.setChild(listMap.get(val.getId())));
        //step3：过滤出顶级部门，即所有的子部门数据都归属于一个顶级父Id
        List<TreeDto> allChildrenList = list.stream()
                .filter(val -> val.getParentId().equals("0")).collect(Collectors.toList());
    }
}
